<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="../../lib/style.css">
<title>权限篇</title>
</head>
<style>
body{ font-size:14px; line-height:150%; font-family:Garamonds,Tahoma; }
</style>
<body>


"<a target="_blank" href="权限系统篇.html" style="color:#008ECD;">权限系统篇</a>" 和 
"<a target="_blank" href="模块篇.html" style="color:#008ECD;">模块篇</a>" 
已经介绍过：
<div style="margin-left:1.2em;">
    1. 权限 = 模块 + 操作<br />
    2. 没有操作的模块将被 "模块菜单树" 构建函数过滤
</div>
    
<br />

在完成模块的添加后，接下来我们就要添加模块操作来生成权限！

<br /><br />

<b id="lfm-privilege-add">1. 增加权限</b><br />
<div style="margin-left:1.2em;">打开<a target="_blank" href="模块篇.html#lfm-module-mtree" style="color:#333;">模块菜单树</a>中的 "内核->权限管理" ，然后点击右上边的 "增加" 按钮打开增加权限的窗口(参见"图1")！</div>
<div style="text-align:center;padding:5px;"><img alt="图1" src="images/privilege_add.gif" style="border:1px solid #ccc;"></div>

<div style="margin-left:1.2em;">
    权限名称：权限的全名，比如'文章列表', '增加文章'等。<br />
    所属模块：操作所属的模块。<br />
    操作名称：模块操作的简称，比如'列表', '增加'等。<br />
    操作代码：模块操作的简码，比如'list', 'add'等。<br />
</div>

<br />

<div style="margin-left:1.2em;">
    说明：<br />
    <div style="margin-left:2em;">
    1. 权限名称通常作为模块操作页面(或弹出窗口)的标题。<br />
    2. 操作名称通常关联模块名称使用(参见"图2"-权限表)或者关联数据行使用。<br />
    3. 操作代码通常关联模块文件名使用(参见 <a href="javascript:void(0)" onclick="window.location.hash='lfm-privilege-dev-valid-title'" style="color:#000">权限检查</a>)，用于检查当前管理员的操作是否越权。<br />
    </div>
</div>
<div style="text-align:center;padding:5px;"><img alt="图2" src="images/privilege_module_act.gif" style="border:1px solid #ccc;"></div>

<br /><br />

<b>2. 编辑、删除权限</b><br />
<div style="margin-left:1.2em;">打开<a target="_blank" href="模块篇.html#lfm-module-mtree" style="color:#333;">模块菜单树</a>中的 "内核->权限管理" 操作即可！</div>

<br /><br />

<b>3. 权限的使用</b>
<div style="margin-left:1.2em;text-indent:2em;">填写了那么多权限的信息(权限名称，所属模块，操作名称，操作代码)，那这些信息究竟有什么用呢？以下就列举了在程序开发中如何使用这些权限信息。</div>
<br />

<div style="margin-left:1.2em;">
    <a id="lfm-privilege-dev-valid-title" href="javascript:void(0)" onclick="var o=document.getElementById('lfm-privilege-dev-valid');o.style.display=o.style.display=='none'?'':'none';" style="font-weight:bold;color:#000">3.1 程序开发之 - 权限检查</a><br />
    <div style="margin-left:2em;" id="lfm-privilege-dev-valid">
        权限检查，即检查当前管理员是否拥有对某模块的操作的权限。代码如下：<br />
        <div class="viewcode-body">
            admin_privilege_valid($module_file, $module_act);
        </div>

        说明：<br />
        <div style="margin-left:1.2em;">
        1. $module_file 为<a target="_blank" href="模块篇.html#lfm-module-add" style="color:#333;">模块的处理文件</a>。<br />
        2. $module_act 为<a href="javascript:void(0)" onclick="window.location.hash='lfm-privilege-add'" style="color:#333;">增加权限</a>时的操作代码<br />
        3. 例如：admin_privilege_valid('article.php','add') 表示检查当前管理是否拥有增加文章的权限
        </div>
        <br />
    </div>

    <a href="javascript:void(0)" onclick="var o=document.getElementById('lfm-privilege-dev-pname');o.style.display=o.style.display=='none'?'':'none';" style="font-weight:bold;color:#000">3.2 程序开发之 - 权限名称</a><br />
    <div style="margin-left:2em;" id="lfm-privilege-dev-pname">
        权限名称，模块操作页面的标题(参见"图3")，代码如下：<br />
        <div class="viewcode-body">
            $tpl['title'] = admin_privilege_name_fk('article.php', 'list');
        </div>
        <br />
    </div>

    <a id="lfm-privilege-dev-titleact-title" href="javascript:void(0)" onclick="var o=document.getElementById('lfm-privilege-dev-titleact');o.style.display=o.style.display=='none'?'':'none';" style="font-weight:bold;color:#000">3.3 程序开发之 - 独立权限</a><br />
    <div style="margin-left:2em;" id="lfm-privilege-dev-titleact">
        独立权限，通常指那些不需要绑带数据行操作的权限。比如"增加"，"列表"等权限(参见"图3")。<br />
        独立权限的使用代码如下：<br />
        <br />
        第一步：获取模块的所有操作并提取增加操作<br />
        <div class="viewcode-body">
            $m_aa = admin_module_acts('article.php'); <br />
            $m_ab = filter_module_acts($m_aa, array('add'), true);
        </div>
        <br />
        第二步：设置增加操作的属性<br />
        <div class="viewcode-body">
            $attribs = array();<br />
            $attribs['add'] = array('onclick'=>"wnd_article_fill(this,'add')");
        </div>
        <br />
        第三步：构建模块操作的按钮<br />
        <div class="viewcode-body">
            $tpl['acts'] = format_module_acts($m_ab, $attribs, 'btn', $items);
        </div>
        <br />
    </div>

    <a id="lfm-privilege-dev-bind-title" href="javascript:void(0)" onclick="var o=document.getElementById('lfm-privilege-dev-bind');o.style.display=o.style.display=='none'?'':'none';" style="font-weight:bold;color:#000">3.4 程序开发之 - 绑定权限</a><br />
    <div style="margin-left:2em;" id="lfm-privilege-dev-bind">
        绑定权限，通常指那些需要绑定数据行操作的权限，比如"编辑","删除"等权限(参见"图3")。<br />
        绑定权限的使用代码如下：<br />
        <br />
        第一步：获取模块的所有操作并提取编辑，删除操作<br />
        <div class="viewcode-body">
            $m_aa = admin_module_acts('article.php'); <br />
            $m_ab = filter_module_acts($m_aa, array('edit','del'), true);
        </div>
        <br />
        第二步：设置编辑，删除操作的属性并绑定<br />
        <div class="viewcode-body">
        foreach( $tpl['article_list']['data'] AS $i => $r ){
            <div style="margin-left:1.5em">
            /* 编辑操作 */<br />
            $attribs = array();<br />
            $attribs['edit']['onclick'] = "wnd_admin_fill(this,'edit',{$r[article_id]})";<br />
            <br />
            /* 删除操作 */<br />
            $attribs['del']['onclick']  = "ListTable.del(this,{$r[article_id]},'";<br />
            $attribs['del']['onclick'] .= f(sprintf($_LANG['spr_confirm_del'],$r['name']),'hstr') ."')";<br />
            <br />
            /* 绑定操作 */<br />
            $tpl['article_list']['data'][$i]['_acts'] = format_module_acts($m_ac, $attribs, 'a');
            </div>
        }
        </div>
        <br />
    </div>
</div>


<div style="text-align:center;padding:5px;"><img alt="图3" src="images/privilege_types.gif" style="border:1px solid #ccc;"></div>

<script>
function hash2title( hash )
{
    obj = hash.replace('#','').replace(/-title$/,'');
    obj = document.getElementById(obj);
    obj ? obj.style.display = '' : '';
}

hash2title(window.location.hash);
</script>


</body>
</html>
